OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级
应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非
SQL数据类型的通路。
基本介绍
OLE 全称 Object Link and embed,即对象连接与嵌入。
作为微软的
组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。OLE DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE DB的应用程序会用到如下的请求序列: 初始化OLE 连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE Object Linking and Embedding,对象连接与嵌入,简称OLE技术。OLE不仅是
桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型。
OLE 是一种
面向对象的技术,利用这种技术可开发可重复使用的
软件组件(COM)。
DB(英文全称data base,数据库)是依照某种数据模型组织起来并存放二级
存储器中的数据集合。
组成
OLE DB 最主要是由三个部分组合而成:
Data Providers 数据提供者
凡是透过OLE DB 将数据提供出来的,就是数据提供者。例如SQL Server 数据库中的数据表,或是附文件名为mdb 的Access 数据库档案等,都是Data Provider。
Data Consumers 数据使用者
凡是使用OLE DB 提供数据的程序或组件,都是OLE DB 的数据使用者。换句话说,凡是使用ADO 的应用程序或网页都是OLE DB 的数据使用者。
Service Components 服务组件
数据服务组件可以执行数据提供者以及数据使用者之间数据传递的工作,数据使用者要向数据提供者要求数据时,是透过OLE DB 服务组件的查询处理器执行查询的工作,而查询到的结果则由指针引擎来管理。
新概念
OLE DB 将传统的
数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种
组件模型中的各个部分被冠以不同的名称:
数据提供者
(Data Provider)。提供数据存储的
软件组件,小到普通的文本文件、大到主机上的复杂数据库,或者电子邮件存储,都是数据提供者的例子。有的文档把这些软件组件的开发商也称为数据提供者。
(Data Service Provider)。位于数据提供者之上、从过去的数据库管理系统中分离出来、独立运行的功能组件,例如查询处理器和
游标引擎(Cursor Engine),这些组件使得数据提供者提供的数据以表状数据(Tabular Data)的形式向外表示(不管真实的物理数据是如何组织和存储的),并实现数据的查询和修改功能。SQL Server 7.0 的查询处理程序就是这种组件的典型例子。
业务组件(Business Component)。利用数据
服务提供者、专门完成某种特定业务信息处理、可以重用的功能组件。
分布式数据库应用系统中的中间层(Middle-Tier)就是这种组件的典型例子。
数据消费者(Data Consumer)。任何需要访问数据的系统程序或应用程序,除了典型的数据库应用程序之外,还包括需要访问各种数据源的开发工具或语言。
结构设计问题
开始编写 OLE DB 应用程序之前应考虑以下问题:
使用何种编程实现来编写 OLE DB 应用程序?
Microsoft 提供多种库来解决该问题:OLE DB 模板库、OLE DB 属性以及 OLE DB SDK 中的原始 OLE DB 接口。另外,Microsoft 还提供帮助您编写程序的向导。有关这些实现的更详细的信息,请参见 OLE DB 模板、属性和其他实现。
是否需要编写自己的提供程序?
大多数开发人员无需这样。Microsoft 提供多种提供程序。无论用户何时创建一个
数据连接,例如,当使用 ATL OLE DB 使用者向导向项目中添加使用者时,“数据链接属性”对话框都将列出系统中所有被注册的可用提供程序。如果其中一个提供程序适合于用户自己的数据存储和数据访问应用程序,最简单的办法就是使用该提供程序。但是,如果用户的
数据存储不适合所提供的类别,则必须创建自己的提供程序。有关创建提供程序的信息,请参见 OLE DB 提供程序模板及其子主题。
需要为自己的使用者提供何种级别的支持?
一些使用者可能非常简单,另一些可能非常复杂。OLE DB 对象的功能由属性指定。使用 ATL OLE DB 使用者向导创建使用者或者使用数据库提供程序向导创建提供程序时,向导将为用户设置合适的对象属性来提供一组标准功能。但是,如果向导生成的使用者类或提供程序类并不具有您需要的所有支持功能,那么您需要查阅这些类在 OLE DB 模板库中的接口。这些接口包装原始 OLE DB 接口,提供附加实现以使其使用起来更加简单。
例如,如果您希望更新行集合中的数据,但在使用向导创建使用者时却忘记指定该功能,则可以在创建使用者之后通过对命令对象设置 DBPROP_IRowsetChange 和 DBPROP_UPDATABILITY 属性来指定该功能。这样,当行集合创建之后,它将具有 IRowsetChange 接口。
您是否有使用其他数据访问技术(ADO、ODBC 或 DAO)的旧版代码?
由于可能有各样各样的技术组合(例如 ADO 组件和 OLE DB 组件一起使用、将 ODBC 代码迁移至 OLE DB 等等),所以
Visual C++ 文档不能涵盖所有的情形。
区别关系
OLE DB 与ODBC 的关系
由于OLE DB 和ODBC 标准都是为了提供统一的访问数据接口,所以曾经有人疑惑:OLE DB 是不是替代ODBC 的新标准?答案是否定的。实际上,ODBC 标准的对象是基于SQL 的数据源(SQL-Based Data Source),而OLE DB 的对象则是范围更为广泛的任何数据存储。从这个意义上说,符合ODBC 标准的数据源是符合OLE DB 标准的数据存储的子集。符合ODBC 标准的数据源要符合OLE DB 标准,还必须提供相应的OLE DB 服务程序(Service Provider),就像SQL Server 要符合ODBC 标准,必须提供SQL Server ODBC 驱动程序一样。现在,微软自己已经为所有的ODBC
数据源提供了一个统一的OLE DB 服务程序,叫做ODBC OLE DB Provider。
ODBC OLE DB Provider 发布之后,有人又担心:ODBC Provider 是不是在ODBC 之上的新的层次(Layer)?如果是,那么使用OLE DB 访问ODBC 数据源是否将影响性能?答案也是否定的。实际上,ODBC Provider 的作用,是替换ODBC Driver Manager,作为应用程序与ODBC 驱动程序之间的桥梁,理论上不会增加任何开销。